<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class verifyregister extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->model('login/user_model', '', TRUE);
        $this->load->model('perfil/perfil_model', '', TRUE);
        $this->load->library('captcha');
        $this->load->helper(array('form', 'url'));
    }

    function index() {
        $captcha = new captcha();
        $datos = $captcha->generarCaptcha();
        $this->load->view('login/header_view');
        $this->load->view('login/register_view', $datos); // carga la vista register_view
        $this->load->view('login/footer_view');
    }

    /**
     * Esta función retorna false cuando el usr_nickname está ocupado, de lo contrario retorna true
     * @param type $usr_nickname
     * @return boolean 
     */
    function checkNickname($usr_nickname) {
        $result = $this->user_model->verifyNickname($usr_nickname);
        if ($result) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Esta función retorna true cuando el email está ocupado, de lo contrario retorna false
     * @param type $usr_email
     * @return boolean 
     */
    function checkEmail($usr_email) {
        $result = $this->user_model->verifyEmail($usr_email);
        if ($result) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * Esta función abre la vista de registro nuevamente 
     */
    private function falseValidation() {
        $this->index();
    }

    /**
     * Esta función guarda al nuevo usuario en la base de datos, crea su perfil y manda el email con la url de activación 
     */
    private function trueValidation($usr_nickname, $usr_password, $usr_email) {
        $code = $this->generateActivationCode();
        $user['name'] = $this->user_model->registerUser($usr_nickname, $usr_password, $usr_email, $code);
        $usr_id = $this->user_model->getId($usr_nickname);
        $this->sendMailActivation($usr_email, $code);
        $this->load->view('login/redirect_view', $user);
    }

    /**
     * Ésta funcion genera el codigo de activacion para un usuario
     * @return type retorna el codigo de activacion para un usuario
     */
    private function generateActivationCode() {
        $code = "";
        $source = 'abcdefghijklmnopqrstuvwxyz';
        $source .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $source .= '1234567890';
        $source = str_split($source, 1);
        for ($i = 1; $i <= 100; $i++) {
            mt_srand((double) microtime() * 1000000);
            $num = mt_rand(1, count($source));
            $code .= $source[$num - 1];
        }
        return $code;
    }

    /**
     * Esta función envía el mail con la url de activación 
     * @param type $usr_email
     * @param type $code 
     */
    private function sendMailActivation($usr_email, $code) {
        $config['protocol'] = 'smtp';
        $config['smtp_host'] = 'ssl://smtp.gmail.com';
        $config['smtp_port'] = '465';
        $config['smtp_timeout'] = '7';
        $config['smtp_user'] = 'socialufro@gmail.com';
        $config['smtp_pass'] = 'qwepoi123098';
        $config['charset'] = 'utf-8';
        $config['newline'] = "\r\n";
        $config['mailtype'] = 'text'; // or html
        $config['validation'] = TRUE; // bool whether to validate email or not
        $this->load->library('email');
        $mail = new CI_Email($config);
        $mail->from('necker1@gmail.com', 'Clouli.com');
        $mail->to($usr_email);
        $mail->subject('Bienvenido a Clouli.com');
        $mail->message('Ingrese a la siguiente dirección para activar su cuenta. ' . site_url() . 'login/verifyregister/activationAccount/' . $code);
        $mail->send();
    }

    /**
     *
     * @param type $code 
     */
    function activationAccount($usr_activacion) {
        $this->load->model('login/user_model');
        $this->load->model('perfil/perfil_model');
        if ($this->user_model->verifyCode($usr_activacion)) {
            $this->user_model->activateAccount($usr_activacion);
            $datos = $this->user_model->getPerfil($usr_activacion);
            $this->perfil_model->registerProfile($datos['usr_id'], $datos['usr_email'], $datos['usr_nickname']);
            echo "Activacion Exitosa!";
        } else {
            echo "Codigo no Válido!";
        }
    }

    /**
     * Funcion que verificará los datos entregados por el usuario, si es correcto lo registra, sino vuelve a la pagina de registro
     */
    function verify() {
        $usr_nickname = $this->input->post('usr_nickname');
        $usr_email = $this->input->post('usr_email');
        $usr_password = $this->input->post('usr_password');
        $usr_con_password = $this->input->post('usr_con_password');
        $cap_respuesta = $this->input->post('cap_respuesta');
        $cap_id = $this->input->post('cap_id');
        if (!$this->checkNickname($usr_nickname) && !$this->checkEmail($usr_email) && $this->checkPassword($usr_password, $usr_con_password) && $this->checkCaptcha($cap_id, $cap_respuesta)) {
            $this->trueValidation($usr_nickname, $usr_password, $usr_email);
        } else {
            $this->falseValidation();
        }
    }

    /**
     * Esta funcion verifica que las pasword ingresadas sean iguales, retorna verdadero/falso
     * @param type $usr_password
     * @param type $con_pasword
     * @return boolean 
     */
    private function checkPassword($usr_password, $usr_con_password) {
        if ($usr_password == $usr_con_password) {
            return true;
        } else {
            return false;
        }
    }

    function checkCaptcha($cap_id, $cap_respuesta) {
        $captcha = new captcha();
        return $captcha->validarDatos($cap_id, $cap_respuesta);
    }

}

